CSRF란?

CSRF Token

CSRF Token은 CSRF 공격을 방어하는 대표적인 방어 기법입니다. CSRF Token의 경우 같은 Origin의 접근만 허용할수 있도록 토큰을 사용자가 저장해 두고, HTTP 요청마다 함께 전송해서 웹 서버에서 해커가 악의적인 접근을 할수 없도록 token 검증을 통해서 제 3자의 개입을 막는 방법입니다. 이 값은 HTML form 태그의 hidden 속성에 입력되거나, 동적 요청에서도 사용될 수 있습니다.

CSRF Token의 경우 CAPTCHA 혹은 암호화 방식과 다르게 추가적인 사용자 상호작용이 필요 없다는 장점을 가지지만, Fetch API를 통한 Authorization 등의 인증 헤더를 설정하는 통신하는 과정에서 보안 문제의 원인이 되기도 합니다.

<?php
	if(!isset($_SESSION["cstftoken"])) {
		$csrftoken = bin2hex(random_bytes(32));
		$_SESSION["csrftoken"] = $csrftoken;
		)
	} else {
		$csrftoken = $_SESSION["cstftoken"];
	}
	
	$method = $_SESSION["HTTP_METHOD"];
	if($method !== "GET" && $method !== "HEAD") {
		!hash_equals($csrftoken, $_POST["cstftoken"]) {
			header("HTTP/1.1 403 Forbidden");
			die("CSRF detected");
		}
		echo "Input value:";
		echo htmlentitles($_POST["query"], ENT_QOUTES|ENT_HTML5, 'utf-8');
	}
?>
 
<form action="" method="POST">
	<input name="csrftoken" type
</form>

CSRF Vulnerability

CSRF Bypass